﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Common;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace Pencas.Models
{
    public class DAOPronostico
    {
        private string connectionString = ConfigurationManager.ConnectionStrings["mydb"].ToString();//"Data Source=GABRIEL-PC;Initial Catalog=Pencas;Integrated Security=True; MultipleActiveResultSets=True;";

        public DataSet ObtenerPronosticos(string userId, bool showPending)
        {
            SqlConnection conn = new SqlConnection(connectionString);
            SqlCommand comm = new SqlCommand("ObtenerPronosticos", conn);
            comm.Parameters.Add("@userId", SqlDbType.Int);
            comm.Parameters.Add("@showPending", SqlDbType.Bit);
            comm.Parameters[0].Value = int.Parse(userId);
            comm.Parameters[1].Value = showPending;
            SqlDataReader rdr;
            comm.CommandType = CommandType.StoredProcedure;

            conn.Open();
            
            rdr = comm.ExecuteReader();

            DataSet ds = new DataSet();

            int i = 1;
            do
            {
                DataTable dt = ds.Tables.Add("Tabla" + i);
                dt.Columns.Add("Id");
                dt.Columns.Add("FechaHora");
                dt.Columns.Add("IdA");
                dt.Columns.Add("NombreA");
                dt.Columns.Add("IdB");
                dt.Columns.Add("NombreB");
                dt.Columns.Add("GolesA");
                dt.Columns.Add("GolesB");
                dt.Columns.Add("PronosticoA");
                dt.Columns.Add("PronosticoB");
                dt.Columns.Add("NombreGrupo");

                while (rdr.Read())
                {
                    DataRow partidoRow = dt.NewRow();
                    partidoRow["Id"] = rdr["id"];
                    partidoRow["FechaHora"] = rdr["fechaHora"];
                    partidoRow["IdA"] = rdr["idA"];
                    partidoRow["NombreA"] = rdr["nombreA"];
                    partidoRow["IdB"] = rdr["idB"];
                    partidoRow["NombreB"] = rdr["nombreB"];
                    partidoRow["GolesA"] = rdr["golesA"];
                    partidoRow["GolesB"] = rdr["golesB"];
                    partidoRow["PronosticoA"] = rdr["pronosticoA"];
                    partidoRow["PronosticoB"] = rdr["pronosticoB"];
                    partidoRow["NombreGrupo"] = rdr["nombreGrupo"];

                    dt.Rows.Add(partidoRow);
                }
                i++;
            } while (rdr.NextResult());

            conn.Close();

            return ds.Tables[0].Rows.Count == 0 ? null : ds;
        }

        public DataSet ObtenerPronosticosSegundaFase(string userId)
        {
            SqlConnection conn = new SqlConnection(connectionString);
            SqlCommand comm = new SqlCommand("ObtenerPronosticosSegundaFase", conn);
            comm.Parameters.Add("@userId", SqlDbType.Int);
            comm.Parameters[0].Value = int.Parse(userId);
            SqlDataReader rdr;
            comm.CommandType = CommandType.StoredProcedure;

            conn.Open();

            rdr = comm.ExecuteReader();

            DataSet ds = new DataSet();

            int i = 1;
            do
            {
                DataTable dt = ds.Tables.Add("Tabla" + i);
                dt.Columns.Add("Id");
                dt.Columns.Add("FechaHora");
                dt.Columns.Add("IdA");
                dt.Columns.Add("IdB");
                dt.Columns.Add("GolesA");
                dt.Columns.Add("GolesB");
                dt.Columns.Add("NombreGrupo");

                while (rdr.Read())
                {
                    DataRow partidoRow = dt.NewRow();
                    partidoRow["Id"] = rdr["id"];
                    partidoRow["FechaHora"] = rdr["fechaHora"];
                    partidoRow["IdA"] = rdr["idA"];
                    partidoRow["IdB"] = rdr["idB"];
                    partidoRow["GolesA"] = rdr["golesA"];
                    partidoRow["GolesB"] = rdr["golesB"];
                    partidoRow["NombreGrupo"] = rdr["nombreGrupo"];

                    dt.Rows.Add(partidoRow);
                }
                i++;
            } while (rdr.NextResult());

            conn.Close();

            return ds.Tables[0].Rows.Count == 0 ? null : ds;
        }

        public DataTable ObtenerPronosticosEspeciales(string userId)
        {
            SqlConnection conn = new SqlConnection(connectionString);
            SqlCommand comm = new SqlCommand("ObtenerPronosticosEspeciales", conn);
            comm.Parameters.Add("@userId", SqlDbType.Int);
            comm.Parameters[0].Value = int.Parse(userId);
            SqlDataReader rdr;
            comm.CommandType = CommandType.StoredProcedure;

            conn.Open();

            rdr = comm.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Columns.Add("IdPrimero");
            dt.Columns.Add("IdSegundo");
            dt.Columns.Add("IdTercero");
            dt.Columns.Add("IdMasGoles");
            dt.Columns.Add("TotalGoles");

            bool hayRegistro = false;
            while (rdr.Read())
            {
                DataRow partidoRow = dt.NewRow();
                partidoRow["IdPrimero"] = rdr["idPrimero"];
                partidoRow["IdSegundo"] = rdr["idSegundo"];
                partidoRow["IdTercero"] = rdr["idTercero"];
                partidoRow["IdMasGoles"] = rdr["idMasGoles"];
                partidoRow["TotalGoles"] = rdr["totalGoles"];

                dt.Rows.Add(partidoRow);
                hayRegistro = true;
            }

            conn.Close();

            return hayRegistro ? dt : null;
        }

        public int GuardarPronostico(DataTable pronosticos, string userId, string token)
        {
            SqlConnection conn = new SqlConnection(connectionString);
            SqlCommand comm = new SqlCommand("GuardarPronostico", conn);
            comm.CommandType = CommandType.StoredProcedure;

            comm.Parameters.Add("@userId", SqlDbType.Int);
            comm.Parameters.Add("@token", SqlDbType.VarChar, 50);
            comm.Parameters.Add("@pronostico", SqlDbType.Structured);
            comm.Parameters[0].Value = int.Parse(userId);
            comm.Parameters[1].Value = token;
            comm.Parameters[2].Value = pronosticos;

            SqlParameter returnValue = new SqlParameter();
            returnValue.Direction = ParameterDirection.ReturnValue;
            comm.Parameters.Add(returnValue);

            conn.Open();
            
            comm.ExecuteNonQuery();

            conn.Close();

            return (int)returnValue.Value;
        }

        public void GuardarPronosticosEspeciales(string userId, string token, string idPrimero, string idSegundo, string idTercero, string idMasgoles, string cantGoles)
        {
            SqlConnection conn = new SqlConnection(connectionString);
            SqlCommand comm = new SqlCommand("GuardarPronosticosEspeciales", conn);
            comm.CommandType = CommandType.StoredProcedure;

            comm.Parameters.Add("@userId", SqlDbType.Int);
            comm.Parameters.Add("@token", SqlDbType.VarChar, 50);
            comm.Parameters.Add("@idPrimero", SqlDbType.Int);
            comm.Parameters.Add("@idSegundo", SqlDbType.Int);
            comm.Parameters.Add("@idTercero", SqlDbType.Int);
            comm.Parameters.Add("@idMasGoles", SqlDbType.Int);
            comm.Parameters.Add("@totalGoles", SqlDbType.Int);
            comm.Parameters[0].Value = int.Parse(userId);
            comm.Parameters[1].Value = token;
            comm.Parameters[2].Value = int.Parse(idPrimero);
            comm.Parameters[3].Value = int.Parse(idSegundo);
            comm.Parameters[4].Value = int.Parse(idTercero);
            comm.Parameters[5].Value = int.Parse(idMasgoles);
            comm.Parameters[6].Value = int.Parse(cantGoles);
            conn.Open();

            comm.ExecuteNonQuery();

            conn.Close();
        }
    }
}